<?php

// Ajax request legality check
require_once('../config.php');
require_once('../functions.php');

if( !check_ajax_referer() ) {
    header( 'Location: index.php' );
    exit(0);
}

session_start();

if( !isset($_SESSION['user_id']) || $_SESSION['user_id'] == 0 ) {
    echo json_encode(array());
    exit(0);
}

$user_id = $_SESSION['user_id'];

// Подключение и выбор БД
set_exception_handler('db_exception_handler');

$db = new PDO("mysql:host=$host_name;dbname=$db_name", $db_user_name, $db_user_pass);
// $db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'CP1251'");
// $db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET CHARACTER SET 'CP1251'");
$db->exec('SET CHARACTER SET utf8');	
file_put_contents("/tmp/from.php.coding", "Кодировка utf8\n");
# ВНИМАНИЕ!!!
# Данный код не имеет проверок запрашиваемых данных
# что может стать причиной взлома!
# Обязательно проверяйте все данные
# поступающие от клиента
 
// Номер запришиваемой страницы
$page = $_REQUEST['page'];
 
// Количество запрашиваемых записей
$limit = $_REQUEST['rows'];

// Условие для WHERE
$whereclaus = "user_id = $user_id";

if( isset($_REQUEST['_search']) && $_REQUEST['_search'] == "true" ) {
	if( isset($_REQUEST['rec_id']) && $_REQUEST['rec_id'] != "" ) {
		$ops = ( $whereclaus == "" ) ? "" : " AND ";
		$whereclaus = $whereclaus.$ops;
		$whereclaus = $whereclaus."rec_id =".$_REQUEST['rec_id'];
	}
					
	if( isset($_REQUEST['address']) && $_REQUEST['address'] != "" ) {
		$ops = ( $whereclaus == "" ) ? "" : " AND ";
		$whereclaus = $whereclaus.$ops;
        $ss = $db->quote('%'.$_REQUEST['address'].'%');
		$whereclaus = $whereclaus."address LIKE ".$ss;
			
	}
					
	if( isset($_REQUEST['subnet']) && $_REQUEST['subnet'] != "" ) {
		$ops = ( $whereclaus == "" ) ? "" : " AND "; 
		$whereclaus = $whereclaus.$ops;
        $ss = $db->quote('%'.$_REQUEST['subnet'].'%');
		$whereclaus = $whereclaus."subnet LIKE ".$ss;
	}
					
	if( isset($_REQUEST['comment']) && $_REQUEST['comment'] != "" ) {
		$ops = ( $whereclaus == "" ) ? "" : " AND "; 
		$whereclaus = $whereclaus.$ops;
        $ss = $db->quote('%'.$_REQUEST['comment'].'%');
		$whereclaus = $whereclaus."comment LIKE ".$ss;
	}
}

if( $whereclaus != '' )
	$whereclaus = " WHERE ".$whereclaus;
	
// Номер элемента массива по которому
// следует производить сортировку
// Проще говоря поле, по которому
// следует производить сортировку 
$sidx = $_REQUEST['sidx'];                
 
// Направление сортировки
$sord = $_REQUEST['sord'];                        
 
// Если не указано поле сортировки,
// то производить сортировку по первому полю
if(!$sidx) $sidx =1;                
 

// Выполним запрос, который
// вернет суммарное кол-во записей в таблице
$recset = $db->query("SELECT COUNT(*) AS count FROM white_from".$whereclaus);
$row = $recset->fetch(PDO::FETCH_ASSOC);

// Теперь эта переменная хранит кол-во записей в таблице
$count = $row['count'];                  
$recset->closeCursor();
 
// Рассчитаем сколько всего страниц займут данные в БД
if( $count > 0 && $limit > 0) {
    $total_pages = ceil($count/$limit);
} else {
    $total_pages = 0;
}                  
 
// Если по каким-то причинам клиент запросил
if ($page > $total_pages) $page=$total_pages;                  
 
// Рассчитываем стартовое значение для LIMIT запроса
$start = $limit*$page - $limit;                  
 
// Зашита от отрицательного значения
if($start < 0) $start = 0;                  
 
// Запрос выборки данных
$sqlstr = "SELECT rec_id, address, subnet, comment FROM white_from";
$sqlstr = $sqlstr.$whereclaus." ORDER BY ".$sidx." ".$sord;
$sqlstr = $sqlstr." LIMIT ".$start.", ".$limit;

$recset = $db->query($sqlstr);                  
 
// Начало формирование объекта
// для последующего преобразоования
// в JSON объект
// см. http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data

$data->page      = $page;
$data->total     = $total_pages;
$data->records   = $count;
// Строки данных для таблицы
$i = 0;
while($row = $recset->fetch(PDO::FETCH_ASSOC)) {
    $data->rows[$i]['id'] = $row[rec_id];
    $data->rows[$i]['cell'] = array(
		$row[rec_id],
		$row[address],
		$row[subnet],
//        $row[comment]
		$row[comment]
	);
    $i++;
}
// Перед выводом не забывайте выставить header
// с типом контента и кодировкой
//header("Content-type: text/script;charset=utf-8");
echo json_encode($data);
exit(0);

// Обработка исключений базы данных
function db_exception_handler($exception) {
    echo_json_answer( 1, "Внутренняя ошибка базы даных." );
//    echo "Uncaught exception: " , $exception->getMessage(), "\n";
    exit(1);
}
?>
